package com.material.c2c.util;

import java.io.StringWriter;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.ObjectMapper;

/**
 * Json工具类
 * @Description: TODO()
 * @author: wt
 * @date: 2016年6月17日 上午11:28:10
 * @最后修改人: wt
 * @最后修改时间: 2016年6月17日 上午11:28:10
 * @JDK version:  jdk1.8 
 * @version V1.0
 * @copyright: 四川凯普顿信息技术股份有限公司
 */
public class JsonUtil  {
	
	private static final Log logger = LogFactory.getLog(JsonUtil.class);		
	
	public static ObjectMapper objectMapper = new ObjectMapper() ;

	/**
	 * Object转换json字符串
	 * @Description: TODO()
	 * @param obj
	 * @return
	 */
	public static String toJson(Object obj) {
		return toJson(obj, false, null);
	}
	
	/**
	 * Object转换json字符串
	 * @Description: TODO()
	 * @param obj
	 * @return
	 */
	public static String toJson(Object obj, String dateFormat) {
		return toJson(obj, false, dateFormat);
	}
	
	/**
	 * Object转换json字符串 带格式化
	 * @Description: TODO()
	 * @param obj			需要转换的数据
	 * @param isJsonFormat	json数据是否格式化
	 * @param dateFormat	日期格式化 默认：timestamp
	 * @return
	 */
	public static String toJson(Object obj, boolean isJsonFormat, String dateFormat) {
		String str = null;
		try {
			JsonFactory jf = new JsonFactory();
			StringWriter sw = new StringWriter();
			JsonGenerator jg = jf.createGenerator(sw);
			//json数据是否格式化
			if (isJsonFormat) {
				jg.useDefaultPrettyPrinter();				
			}
			//日期格式化
			if (dateFormat != null && !"".equals(dateFormat)){
				SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
				objectMapper.setDateFormat(sdf);
			}
			objectMapper.writeValue(jg, obj);
			str = sw.toString();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return str;
	}
	
	public static void main(String[] args) {
		List<Map<String, Object>> list = new ArrayList<Map<String,Object>>();
		Map data1 = new HashMap<String,String>();
		data1.put("code", "0");
		data1.put("name", "男");
		data1.put("date", new Date());
		Map data2 = new HashMap<String,String>();
		data2.put("code", "1");
		data2.put("name", "女");
		data2.put("date", new Date());
		list.add(data1);
		list.add(data2);
		System.out.println("##json1:" + JsonUtil.toJson(list));
		System.out.println("##json2:" + JsonUtil.toJson(list, "yyyy-MM-dd"));
	}
	
}
